Many of today's corporations have developed vast amounts of computer software for use in their businesses. This software has typically been developed over many years and usually is written in a high level computer language, such as COBOL.
Application programs written in COBOL or other high level languages generally comprise a plurality of modules which inter-relate through calls and the like. Although not required by most versions of COBOL, such modules are generally written in a structured fashion; that is, their structure and flow follow certain rules which maintain overall structural integrity, thereby facilitating reliability and maintainability of the overall application program.
Nevertheless, the relationship between distinct modules in the application program can become extremely convoluted and difficult to understand when modifications or enhancements are needed. Problems typically exist in the maintenance and enhancement of such large application programs (sometimes referred to as systems), especially if such tasks are to be performed in an error-free, timely manner, and at a minimum cost.
Some of the current problems in performing such maintenance and enhancement functions are:
1) lack of uniform methodology in the maintenance or enhancement function implementation; PA1 2) individual programmer coding styles can lead to many different styles within one or more modules; PA1 3) the time required to understand a module by one programmer usually has to be completely repeated by the next programmer with the sometimes undesired effect that certain modules can only be effectively maintained by one programmer; PA1 4) modification of modules may be made without knowledge of its impact on other modules; PA1 5) inability to apply structured programming techniques to actual maintenance and enhancement due to the inability to understand the full nature of inter-relationships within one or more modules; PA1 6) the maintenance and enhancement of program modules originally written in a structured manner can become unstructured especially when it is difficult to understand inter-module relationships; and PA1 7) haphazard commenting and documentation can frustrate module and inter-module understanding. PA1 1) determine all modules that a call-parameter is passed to from a given module and what the matching entry-parameters are named; PA1 2) trace a report data element to its origin and see everything that happened to create the report data element; PA1 3) determine all data elements that can change the value of a specific data element; PA1 4) determine all the places that a specific data element changes the value of other data elements; and PA1 5) determine all the modules that use a specific data element through linkage. PA1 1) determine the call and calling hierarchy of the selected modules and view the documentation for any particular module within this hierarchy; PA1 2) create a tree diagram of the call and calling modules beginning with any user specified module or for all selected modules in the current interactive session; PA1 3) determine the entire calling structure of a group of modules beginning with any specified module; PA1 4) match the call and entry-parameters between any calling module and called module, and in particular to expand the subelements of any parameter; PA1 5) determine for any subelement of any parameter, how that subelement is referenced, used, set, called or how it calls other subelements; PA1 6) determine if there is a mismatch between the call-parameters of a calling module and the entry-parameters of a called module; PA1 7) determine if a modification to one module will affect other modules, and in particular, determine if the data being changed in one module is used in a call from another module or in a call to another module; PA1 8) trace a call-parameter in a user specified module to all other modules in that chain regardless of parameter name differences. This analysis is particularly important for COBOL program modules where a parameter passed between the calling and called modules need not be known by the same; PA1 9) trace the control flow within a module and navigate to called modules using the program being solved as the guide to the called modules; PA1 10) determine what one or more modules do in their program execution by viewing their internal documentation; PA1 11) determine when or if a change was put into a previous version of the module by viewing the remark section of the module through module documentation or by searching the remarks section for specific key words or strings of data using key word searching; and PA1 12) determine what modules call specific utilities and conversely determine what utilities are called by what modules. PA1 1) determine where, within selected modules, a key- word string or strings is located, as well as to be able to immediately select those keywords for further analysis; PA1 2) search source code database information, including remarks, comments and procedural source code for keywords or keyword strings that might help with the analysis of a particular problem; PA1 3) determine all modules that are impacted by a change to a copy library member; and PA1 4) determine such analysis as which modules in a system issue a specific user abnormal end (abend) code by using keyword search capability.
As a result of these problems in maintaining and enhancing application programs, many corporations use up to approximately eighty percent of their programmers in maintaining existing programs rather than developing new programs.
Research has also shown that approximately fifty percent of the total time spent on a program maintenance change or enhancement is spent analyzing the current application so as to understand as best as possible, the overall impact of the maintenance or enhancement change.
The present invention is specifically directed to a system and method that provides multi-module relationship information which increases the speed and accuracy of the analysis process required when making a maintenance change or enhancement.
Typical prior art program analysis systems are summarized below:
Navigator/MF.TM.
This product, published by Compuware of Farmington Hills, Mich., is an on-line program analysis product which analyzes one COBOL module at a time. Although it provides detailed analysis of a single module, it lacks the capability of performing multi-level relational analysis and impact analysis across a plurality of COBOL modules.
VIA/SMARTEdit.TM.
This product, published by Viasoft, Inc. of Phoenix, Ariz., is another program analysis tool for analyzing one COBOL module. This product also gives the programmer/analyst the ability to edit a COBOL module. This product lacks the capability of performing multi-level relational analysis and impact analysis across a plurality of COBOL modules.
VIA/INSIGHT.TM.
This product, also published by Viasoft, Inc., performs an in depth analysis of one COBOL module without the edit function of VIA/SMARTEdit.TM.. This product also lacks the functions of multi-level relational analysis and impact analysis across a plurality of COBOL modules.
DCDIII.TM. (Data Correlation and Documentation System)
This product, published by Marble Computer, Inc. of Martinsburg, W. Va., is able to run in a background environment so as to produce report files of information derived from COBOL modules. The product does have the ability to do limited multiple module data dement analysis, but is not an interactive on-line tool that can provide user driven analysis as set forth in the present invention. This product is primarily a tool to produce documentation concerning a COBOL program with the ability to produce some system-wide documentation.
PM/SS.TM.
This product, published by Adpac Computing Languages Corporation of San Francisco, Calif., is a tool to extract information from COBOL modules for purposes of documenting the system and creating and monitoring standards. It can also be used for loading data dictionaries with information about data elements and analyzing the impact of changes. This tool is substantially different from the present invention and is presented primarily for purposes of showing tools which are ostensibly designed to increase productivity for maintaining existing COBOL programs.
Thus what is seen is that the present invention provides a system which can be used by the computer programmer or programmer/analyst who is trying to determine how a modification or enhancement to a program should be incorporated within that program.
The present invention in its preferred embodiment provides information about COBOL modules in eight created databases and provides through those databases interactive program analysis by an associated interactive program analysis system. The present invention is primarily differentiated from the prior art by providing not only a database generation system that creates multiple databases based upon information including inter-module information, contained in multiple modules, but also by providing an interactive program analysis system that uses the information within these databases so as to provide intra and inter-module information which is relevant to the programmer in order to implement a desired modification or enhancement. This interactive analysis can be provided in three main areas; namely, data analysis, process analysis, and impact analysis.
In data analysis, the present invention includes the ability to provide detailed analysis about how a data element is referenced, how a data element is used to change the value of another data element, and how the data element has its value set by other data elements, constants or literals.
In process analysis, the present invention includes the ability to analyze the call and calling modules and their parameters, to allow user controlled analysis of control flow between processes or paragraphs within a specific module, and to analyze the internal documentation of a user specified module.
In impact analysis, the present invention includes the ability to determine all modules and data elements that may be affected by a maintenance change or enhancement by providing the ability to search for applicable strings or words within one or more modules.